home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 247_02 / rsakey.c < prev    next >
Text File  |  1989-04-17  |  2KB  |  66 lines

  1. /*
  2.  *   Program to generate RSA keys.
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include "miracl.h"
  7.  
  8. main()
  9. {  /*  calculate public and private keys  *
  10.     *  for rsa encryption                 */
  11.     int n1,n2,k;
  12.     long seed;
  13.     big p,q,ke,kd;
  14.     FILE *outfile;
  15.     mirsys(100,MAXBASE);
  16.     printf("random number seed = ");
  17.     scanf("%ld",&seed);
  18.     getchar();
  19.     irand(seed);
  20.     p=mirvar(0);
  21.     q=mirvar(0);
  22.     ke=mirvar(0);
  23.     kd=mirvar(0);
  24.     k=0;
  25.     do
  26.     {
  27.         printf("minimum size of keys in decimal digits= ");
  28.         scanf("%d",&k);
  29.         getchar();
  30.     } while (k<30);
  31.     printf("generating keys - please wait\n");
  32.     n1=k/2+4;
  33.     n2=k/2-4;
  34.     do
  35.     { /* ensure p>>q */
  36.         strongp(p,n1);
  37.         strongp(q,n2);
  38.         premult(q,1000,ke);
  39.     } while (compare(p,ke)<=0);
  40. /*  ke=p*q                  */
  41.     multiply(p,q,ke);
  42. /*  kd=(2*(p-1)*(q-1)+1)/3  */
  43.     decr(p,1,p);
  44.     decr(q,1,q);
  45.     multiply(p,q,kd);
  46.     premult(kd,2,kd);
  47.     incr(kd,1,kd);
  48.     subdiv(kd,3,kd);
  49.     incr(p,1,p);
  50.     incr(q,1,q);
  51.     printf("public encryption key\n");
  52.     cotnum(ke,stdout);
  53.     printf("private decryption key\n");
  54.     cotnum(kd,stdout);
  55.     WRAP=OFF;
  56.     IOBASE=60;
  57.     outfile=fopen("public.key","w");
  58.     cotnum(ke,outfile);
  59.     fclose(outfile);
  60.     outfile=fopen("private.key","w");
  61.     cotnum(kd,outfile);
  62.     cotnum(p,outfile);
  63.     cotnum(q,outfile);
  64.     fclose(outfile);
  65. }
  66.